home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 001-100 / 001-025 / 020 / amigatoatari / efopen.c < prev    next >
C/C++ Source or Header  |  1995-03-17  |  1KB  |  59 lines

  1. #include <stdio.h>
  2.  
  3. /*
  4.  * Attempt to open a file with the given access mode.
  5.  * Return its file descriptor, or if the open fails, print an error
  6.  * message and exit.
  7.  */
  8. FILE *efopen(name, mode)
  9. char *name, *mode;
  10. {
  11.     FILE *fp, *fopen();
  12.     char *msg;
  13.  
  14.     if ((fp = fopen(name, mode)) != NULL)
  15.         return fp;
  16.  
  17.     fprintf(stderr, "Cannot %s: '%s'\n",
  18.         strcmp(mode, "w") ? "open" : "create", name);
  19.     exit(1);
  20. }
  21.  
  22.  
  23. /*
  24.  * Manipulate file extensions.
  25.  * 'name' must be large enough to hold any possible filename.
  26.  * If 'stripp' is nonzero, any old extension will be removed.  Then, if the
  27.  * file does not already have an extension, 'extension' is appended to the
  28.  * filename.
  29.  */
  30. char *fext(name, extension, stripp)
  31. char *name, *extension;
  32. int stripp;
  33. {
  34.     char *s, *beg;
  35.  
  36.                         /* go past pathname */
  37.     for (beg = name + strlen(name) - 1; beg > name; --beg)
  38.         if (stpchr("/\\", *beg))
  39.         {
  40.             ++beg;
  41.             break;
  42.         }
  43.  
  44.     if (stripp)                /* strip extension */
  45.     {
  46.         for (s = beg; *s && *s != '.'; ++s)
  47.             ;
  48.         *s = '\0';
  49.     }
  50.  
  51.     for (s = beg; *s != '.'; ++s)        /* add extension */
  52.         if (!*s)
  53.         {
  54.             strcat(beg, extension);
  55.             break;
  56.         }
  57.     return name;
  58. }
  59.